﻿using System;
using System.Collections.Generic;
using CapaDeGestion;
using Entidades;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using log4net;

namespace ApuestasNetInterfaz
{
    public partial class AgregarUsuario : System.Web.UI.Page
    {
        protected static readonly ILog log = LogManager.GetLogger(typeof(AgregarUsuario));
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["login"] != null)
            {
                usuarioConectado.Text = ((Usuario)Session["login"]).Nombreusuario;
            }
           
      
        }
        /// <summary>
        /// Metodo para registrar un usuario
        /// valida si los campos del formulario no estan vacios 
        /// para luego hacer la insercion
        /// </summary>
      
        protected void registrar_Click(object sender, EventArgs e)
        {
            IGestionUsuario gestionUsuario = new GestionUsuario();

           
            if(ValidarCamposVacios())
            {
                if(ValidarNombreUsuario(nombreusuario.Text))
                {
                    Usuario nuevoUsuario = new Usuario();
                    nuevoUsuario.Nombreusuario = nombreusuario.Text;
                    nuevoUsuario.Contrasena = gestionUsuario.EncriptarContrasena(contrasena.Text);
                    nuevoUsuario.Preguntasecreta = preguntasecreta.Text;
                    nuevoUsuario.Respuesta = respuesta.Text;
                    nuevoUsuario.Nombre = nombre.Text;
                    nuevoUsuario.Apellido = apellido.Text;
                    nuevoUsuario.Sexo = sexo.SelectedItem.Value;
                    nuevoUsuario.Tipo = tipo.Text;
                    gestionUsuario.Insertar(nuevoUsuario);
                    MessageBox.Show("Usuario registrado con éxito", "AVISO", MessageBoxButtons.OK);
                    Response.Redirect("Inicio.aspx");
                    log4net.Config.XmlConfigurator.Configure();
                    log.Warn("Usuario agregado exitosamente");
                }
            }

        }
        /// <summary>
        /// Metodo que comprueba si los campos no estan vacios 
        /// </summary>
        
        private bool ValidarCamposVacios()
        {
            if(nombre.Text.Equals("") || apellido.Text.Equals("") || sexo.SelectedIndex.Equals("") || 
                nombreusuario.Text.Equals("") || contrasena.Text.Equals("") || vericontrasena.Text.Equals("")
                || preguntasecreta.Text.Equals("") || respuesta.Text.Equals(""))
            {
                MessageBox.Show("No puede dejar campos vacíos", "ERROR", MessageBoxButtons.OK);
                return false;
                
            }

            if(!(contrasena.Text.Equals(vericontrasena.Text)))
            {
                MessageBox.Show("Las contraseñas deben ser iguales", "ERROR", MessageBoxButtons.OK);
                return false;
            }

            return true;
            
        }

        /// <summary>
        /// Recibe un string y valida si ya el nombre de usario 
        /// no esta siendo utilizado 
        /// </summary>
       
        private bool ValidarNombre (string nombre)
        {
            IGestionUsuario gestionUsuario = new GestionUsuario();
            IList<Usuario> usuNombre = gestionUsuario.BuscarNombreUsuario(nombre);

            if (usuNombre.Count == 0)
            {
                return true;
            }
            MessageBox.Show("El nombre de usuario ya esta siendo utilizado", "ERROR", MessageBoxButtons.OK);
            return false;
            
        }
        /// <summary>
        /// Valida que el nombre de usuario no tenga caracteres 
        /// y sea correcto para luego asentarlo en la bd
        /// </summary>
        
        private bool ValidarNombreUsuario(string nombre)
        {
            string caracteres;
            caracteres = "\\+([-+.']\\+)*";

            if(!Regex.IsMatch(nombre,caracteres))
            {
                if(Regex.Replace(nombre,caracteres, String.Empty).Length != 0)
                {
                    return ValidarNombre(nombre);
                }
                MessageBox.Show("El formato del nombre de usuario no debe tener caracteres, solo letras y numeros", "ERROR", MessageBoxButtons.OK);
                return false;
            }
            MessageBox.Show("El formato del nombre de usuario no debe tener caracteres, solo letras y numeros", "ERROR", MessageBoxButtons.OK);
            return false;
        }

        protected void CerrarSesion_Click(object sender, EventArgs e)
        {
            if (Session["login"] != null)
            {
                Session["login"] = null;
                Response.Redirect("Inicio.aspx");
            }
        }
    }
}